﻿/*
 * 设计模式 - 模板模式
 * 目的: 只留出必要的部分让子类自定义
 *
 * 模板模式和建造者模式的区别
 * 建造者模式是只定义步骤,不负责实现
 * 模板模式是基类给你做了某些步骤(部分),剩下一些步骤(部分)需要自己实现(填空)
 */

TempleBase temple = new MyTemple();
temple.GetResult();


public abstract class TempleBase
{
    public void Step1()
    {
        Console.WriteLine("第一步:我执行了XXX");
    }

    public void Step2()
    {
        Console.WriteLine("第二步:我执行了XXX");
    }

    public abstract void Step3();

    public virtual void Step4()
    {
        Console.WriteLine("第四步:我执行了XXX");
    }


    public void GetResult()
    {
        Step1();
        Step2();
        Step3();
        Step4();
    }
}


public class MyTemple : TempleBase
{
    public override void Step3()
    {
        Console.WriteLine("第三步:我执行了自定义的第三步,MY Three");
    }


    public override void Step4()
    {
        Console.WriteLine("第四步:我执行了自定义的第四步,MY Fourth");
    }
}